One way to increase computing speed is to utilize parallelism. Large real world applications with irregular control flow or data flow pose challenges on the progressive improvement of the state-of-the-art optimizing compilers, as these irregular control flow and data flow may often not be compile-time analyzable. This may in turn inhibit or reduce important loop optimizations such as parallelization and vectorization.
Conventional wisdom on parallelizing loops with such irregular control flow and/or data flow has mainly focused on eliminating or reducing the loop carried control flow or data flow dependencies. Accordingly, the issue on how to effectively enable both control and data speculation for general loop optimizations such as parallelization, vectorization, loop distribution, and fusion remains open.